FPGA丨设计行缓存(linebuffer)生成像素矩阵 |
您所在的位置:网站首页 › fpga 滤波 › FPGA丨设计行缓存(linebuffer)生成像素矩阵 |
一、行缓存介绍
一幅图像是由一个个像素点构成的,对于一幅480*272大小的图片来说,其宽度是480,高度是272。在使用FPGA进行图像处理时,最关键的就是使用FPGA内部的存储资源对像素行进行缓存与变换。 由于在图像处理过程中,经常需要对图像进行开窗。如在进行卷积操作时,我们需要将开窗得到的如3X3大小的局部图像数据与卷积核进行卷积运算,从而完成处理。而开窗操作需要使用行缓存来实现,因此下面就介绍一下行缓存是什么。 为了实现3行行缓存,由上图可知,我们就需要3个fifo。整体的思路就是,第一行数据依次输入进来写入fifo1,当写到第一行最后一个数据时,开始从fifo1依次读出数据然后写入fifo2,依次类推!!!就这样,当第四行数据到来的时候,此时三个fifo会同时输出数据,而输出的数据正是前三行数据且是对齐的。 二、程序设计1、line_buffer `timescale 1ns/1ps module line_buffer ( rst_n, clk, din, dout, valid_in, valid_out ); parameter WIDTH = 10;//数据位宽 parameter IMG_WIDTH = 480;//图像宽度 input rst_n; input clk; input [WIDTH-1:0] din; output [WIDTH-1:0] dout; input valid_in;//输入数据有效,写使能 output valid_out;//输出给下一级的valid_in,也即上一级开始读的同时下一级就可以开始写入 wire rd_en;//读使能 reg [8:0] cnt;//这里的宽度注意要根据IMG_WIDTH的值来设置,需要满足cnt的范围≥图像宽度 always @(posedge clk or negedge rst_n) begin if(!rst_n) cnt 1'b0}}; else if(valid_in) if(cnt == IMG_WIDTH) cnt |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |